Error using `loess.smooth` but not `loess` or `lowess`
Posted
by
Sandy
on Stack Overflow
See other posts from Stack Overflow
or by Sandy
Published on 2011-01-10T10:20:02Z
Indexed on
2011/01/10
10:53 UTC
Read the original article
Hit count: 373
I need to smooth some simulated data, but occasionally run into problems when the simulated ordinates to be smoothed are mostly the same value. Here is a small reproducible example of the simplest case.
> x <- 0:50
> y <- rep(0,51)
> loess.smooth(x,y)
Error in simpleLoess(y, x, w, span, degree, FALSE, FALSE, normalize = FALSE, :
NA/NaN/Inf in foreign function call (arg 1)
loess(y~x)
, lowess(x,y)
, and their analogue in MATLAB produce the expected results without error on this example. I am using loess.smooth
here because I need the estimates evaluated at a set number of points. According to the documentation, I believe loess.smooth
and loess
are using the same estimation functions, but the former is an "auxiliary function" to handle the evaluation points. The error seems to come from a C function:
> traceback()
3: .C(R_loess_raw, as.double(pseudovalues), as.double(x), as.double(weights),
as.double(weights), as.integer(D), as.integer(N), as.double(span),
as.integer(degree), as.integer(nonparametric), as.integer(order.drop.sqr),
as.integer(sum.drop.sqr), as.double(span * cell), as.character(surf.stat),
temp = double(N), parameter = integer(7), a = integer(max.kd),
xi = double(max.kd), vert = double(2 * D), vval = double((D +
1) * max.kd), diagonal = double(N), trL = double(1),
delta1 = double(1), delta2 = double(1), as.integer(0L))
2: simpleLoess(y, x, w, span, degree, FALSE, FALSE, normalize = FALSE,
"none", "interpolate", control$cell, iterations, control$trace.hat)
1: loess.smooth(x, y)
loess
also calls simpleLoess
, but with what appears to be different arguments. Of course, if you vary enough of the y values to be nonzero, loess.smooth
runs without error, but I need the program to run in even the most extreme case.
Hopefully, someone can help me with one and/or all of the following:
- Understand why only
loess.smooth
, and not the other functions, produces this error and find a solution for this problem. - Find a work-around using
loess
but still evaluating the estimate at a specified number of points that can differ from the vector x. For example, I might want to use onlyx <- seq(0,50,10)
in the smoothing, but evaluate the estimate atx <- 0:50
. As far as I know, usingpredict
with a new data frame will not properly handle this situation, but please let me know if I am missing something there. - Handle the error in a way that doesn't stop the program from moving onto the next simulated data set.
Thanks in advance for any help on this problem.
© Stack Overflow or respective owner